import {
  getBaseUrl,
  requestUtil,
  getWxLogin,
  getUserProfile
} from '../../utils/requestUtil.js';

Page({
  /**
   * 页面的初始数据
   */
  data: {
    baseUrl: '',
    productObj: {},
    activeIndex: 0,
    isAuthorized: false // 添加授权状态判断字段
  },

  productInfo: {},

  /**
   * 生命周期函数--监听页面加载
   */
  async onLoad(options) {
    const app = getApp();
    const baseUrl = getBaseUrl();
    this.setData({
      baseUrl
    });
    await this.getProductDetail(options.id);
    await this.getProductEvaluations(options.id);
    this.saveProductHistory(); // 保存商品历史记录
    // 检查全局登录状态
    this.setData({
      isAuthorized: app.checkLoginStatus()
    });
  },

  // 详情页的商品介绍和规格参数分页点击事件
  fenye(e) {
    const {
      index
    } = e.currentTarget.dataset;
    this.setData({
      activeIndex: index
    });
  },

  // 获取商品详情
  async getProductDetail(id) {
    try {
      const result = await requestUtil({
        url: '/product/detail',
        data: {
          id
        },
        method: "GET"
      });
      this.productInfo = result.message;
      this.setData({
        productObj: result.message,
      });
    } catch (error) {
      console.error('获取商品详情失败:', error);
      wx.showToast({
        title: '获取商品详情失败',
        icon: 'none'
      });
    }
  },

  // 获取商品评价
  async getProductEvaluations(id) {
    try {
      const result = await requestUtil({
        url: '/product/evaluations',
        data: {
          productId: id
        },
        method: "GET"
      });
      const productObj = this.data.productObj;
      productObj.evaluationList = result.message.map(item => ({
        ...item,
        // 格式化时间，如果 createTime 是字符串需要先转换为 Date 对象
        createTime: this.formatTime(new Date(item.createTime))
      }));
      
      this.setData({
        productObj
      });
    } catch (error) {
      console.error('获取商品评价失败:', error);
      wx.showToast({
        title: '获取商品评价失败',
        icon: 'none'
      });
    }
  },
  // 添加时间格式化方法（与历史记录页面保持一致）
  formatTime(date) {
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hour = String(date.getHours()).padStart(2, '0');
    const minute = String(date.getMinutes()).padStart(2, '0');
    return `${year}-${month}-${day} ${hour}:${minute}`;
  },
  // 购物车点击事件
  async cartAdd() {
    const app = getApp();
    if (!app.globalData.isLoggedIn) {
      await this.login();
      if (!app.globalData.isLoggedIn) {
        return;
      }
    }
    this.setCartadd();
    wx.showToast({
      title: '加入成功',
      icon: 'success',
      mask: 'true'
    });
  },

  // 点击立即购买
  async handleBuy() {
    const app = getApp();
    if (!app.globalData.isLoggedIn) {
      await this.login();
      if (!app.globalData.isLoggedIn) {
        return;
      }
    }
    this.setCartadd();
    wx.switchTab({
      url: '/pages/cart/index',
    });
  },

  async login() {
    const app = getApp();
    try {
      const [loginRes, userRes] = await Promise.all([getWxLogin(), getUserProfile()]);
      console.log(loginRes.code);
      console.log(userRes.userInfo.nickName, userRes.userInfo.avatarUrl);
      let loginParam = {
        code: loginRes.code,
        nickName: userRes.userInfo.nickName,
        avatarUrl: userRes.userInfo.avatarUrl
      };
      const backendRes = await requestUtil({
        url: '/user/wxlogin',
        data: loginParam,
        method: 'POST'
      });
      console.log('后端返回的数据:', backendRes);

      if (backendRes.code === 0) {
        wx.setStorageSync('token', backendRes.token);
        if (backendRes.openid) {
          wx.setStorageSync('openid', backendRes.openid);
          app.globalData.isLoggedIn = true;
          app.globalData.openid = backendRes.openid;
          this.setData({
            isAuthorized: true
          });
          console.log('登录成功，保存的 token:', backendRes.token);
          console.log('登录成功，保存的 openid:', backendRes.openid);
        } else {
          console.error('后端返回的数据中没有 openid 字段');
          wx.showToast({
            title: '获取 openid 失败，请重试',
            icon: 'none'
          });
        }
      } else {
        wx.showToast({
          title: '登录失败，请重试',
          icon: 'none'
        });
      }
    } catch (error) {
      console.error('授权登录失败', error);
      wx.showToast({
        title: '授权失败，请重试',
        icon: 'none'
      });
    }
  },

  // 加入购物车
  setCartadd() {
    let cart = wx.getStorageSync('cart') || [];
    let index = cart.findIndex(v => v.id == this.productInfo.id);
    if (index === -1) { // 购物车里不存在当前商品
      this.productInfo.num = 1;
      this.productInfo.checked = true;
      cart.push(this.productInfo);
    } else { // 否则存在
      cart[index].num++;
    }
    // 把购物车添加到缓存中
    wx.setStorageSync('cart', cart);
  },


  // 保存商品浏览历史记录到后端
  saveProductHistory() {
    const app = getApp();
    if (!app.globalData.isLoggedIn) {
      wx.showToast({
        // title: '请先登录',
        icon: 'none'
      });
      return;
    }
    const openid = app.globalData.openid;
    const productId = this.productInfo.id; // 获取商品id

    // 根据商品id再次获取商品详情
    requestUtil({
      url: '/product/detail',
      data: {
        id: productId
      },
      method: 'GET'
    }).then(async (productDetailRes) => {
      if (productDetailRes.code === 0) {
        const productInfo = productDetailRes.message;
        const productHistory = {
          openid: openid,
          productId: productInfo.id,
          name: productInfo.name,
          price: productInfo.price,
          vtime: new Date(),
          productPic: productInfo.proPic // 使用获取到的商品图片字段
        };

        // 保存历史记录
        await requestUtil({
          url: '/productHistory/save',
          data: productHistory,
          method: 'POST'
        });

        console.log('保存历史记录成功');
      } else {
        console.error('获取商品详情失败，无法保存历史记录', productDetailRes.message);
      }
    }).catch(err => {
      console.error('获取商品详情失败，无法保存历史记录', err);
    });
  },

  
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {}
});